package Terminal.View.Gestori;

import java.util.ArrayList;
import java.util.Map;

import com.sun.xml.internal.ws.model.wsdl.WSDLBoundFaultImpl;

import Terminal.Controller.CGestireSottoprogettiControl;
import Terminal.Eccezioni.ExceptionTimelogging;
import Terminal.Entity.Dominio.ESottoprogetto;
import Terminal.View.JBarraNavigazione;
import Terminal.View.JBottoni;
import Terminal.View.JDescrizione;
import Terminal.View.JElenco;
import Terminal.View.TimeLoggingFrame;
import Terminal.View.Sottoprogetto.JBottoniSottoprogettoForm;
import Terminal.View.Sottoprogetto.JBottoniSottoprogettoVista;
import Terminal.View.Sottoprogetto.JDescrizioneSottoprogettoForm;
import Terminal.View.Sottoprogetto.JDescrizioneSottoprogettoVista;
import Terminal.View.Sottoprogetto.JElencoSottoprogetto;

public class GestoreSottoprogetto extends GestoreLavoro {

	private static GestoreSottoprogetto _istanza;
	private CGestireSottoprogettiControl controller = new CGestireSottoprogettiControl();
	
	private GestoreSottoprogetto()
	{}
	
	public static GestoreSottoprogetto istanza()
	{
		if (_istanza == null)
			_istanza = new GestoreSottoprogetto();
		return _istanza;
	}
	
	public void smistaScenario(String scenario)
	{
		switch (scenario) 
		{
			case "Visualizza": 
				this.visualizza();
				break;
				
			case "VisualizzaSpecifico": 
				this.visualizza();
				break;
				
			case "CambiaVisualizzazione": 
				this.cambiaVisualizzazione();
				break;				
				
			case "Rimuovi":
				this.rimuovi();
				break;				
				
			case "Aggiorna":
				this.aggiorna();
				break;
				
			case "Nuovo": 
				this.nuovo();
				break;
				
			case "Modifica": 
				this.modifica();
				break;
				
			case "Elimina": 
				this.elimina();
				break;
				
			case "Salva":
				this.salvaSottoprogetto();
				break;				
				
			default:
				this.visualizza();
				break;
		}
				
	}

	private void aggiorna() {
		
		Map<String,String> dati = ((JDescrizioneSottoprogettoForm) this.descrizione).cattura();
		
		String nome = dati.get("nome");
		String inizio = dati.get("inizio");
		String scadenza = dati.get("scadenza");
		String budget = dati.get("budget");
		String manager = dati.get("manager");
		
		controller.modificaSottoprogetto(nome, inizio, scadenza, manager, budget);
		
		this.visualizza();
	}

	private void salvaSottoprogetto() {

		Map<String,String> dati = ((JDescrizioneSottoprogettoForm) this.descrizione).cattura();
		
		String nome = dati.get("nome");
		String inizio = dati.get("inizio");
		String scadenza = dati.get("scadenza");
		String budget = dati.get("budget");
		String manager = dati.get("manager");
		
		try{
			controller.controllodati(nome, inizio, scadenza, manager, budget);
			controller.nuovoSottoprogetto(nome, inizio, scadenza, manager, budget);
			this.visualizza();
		}
		catch(ExceptionTimelogging e){
			this.smista("Errore", "CreaSottoprogetto");
		}
		catch(Exception e1){
			e1.printStackTrace();
		}
		
	}
	
	private void rimuovi() {
		
		int indicesubprj = this.elenco.getSelectedIndex();
		controller.selectSottoprogettoByIndex(indicesubprj);
		controller.eliminaSottoprogetto();
		TimeLoggingFrame.istanza().getPannello().pulisci();
		visualizza();
	}

	@Override
	protected ArrayList<String> getListaElenco() {
		
		int indiceprj = GestoreProgetto.istanza().getProgettoSelezionato();
		controller.selectProgettoByIndex(indiceprj);
		ArrayList<String> sottoprogetti = controller.getSottoprogettiToStringList();
		return sottoprogetti;
	}

	@Override
	protected Object getElementoSelezionato() {
		ESottoprogetto subprj= new ESottoprogetto();
		if(controller.getSottoprogettiToStringList().size()!=0){
			 subprj = controller.selectSottoprogettoByIndex( this.elenco.getSelectedIndex() );
			return subprj;
		}
		else return null;
	}

	@Override
	protected JElenco setElenco(ArrayList<String> stringhe) {
		return new JElencoSottoprogetto( stringhe );
	}

	@Override
	protected JDescrizione setDescrizioneVista() {
		return new JDescrizioneSottoprogettoVista();
	}
	@Override
	protected JDescrizione setDescrizioneForm() {
		ArrayList<String> managers = controller.getManagerToStringList();		
		return new JDescrizioneSottoprogettoForm(managers);
	}	

	@Override
	protected JBottoni setBottoniVista() {
		return new JBottoniSottoprogettoVista();
	}
	
	@Override
	protected JBottoni setBottoniForm( boolean aggiorna ) {
		JBottoni bottoni =  new JBottoniSottoprogettoForm();
		((JBottoniSottoprogettoForm) bottoni).setAggiorna(aggiorna);
		return bottoni;
	}	

	@Override
	protected JBarraNavigazione setBarraNavigazione() {
		JBarraNavigazione navigazione = new JBarraNavigazione();
		navigazione.setIndietroEnabled(true);
		
		if(controller.getSottoprogettiToStringList().size()!=0)
		{
		ESottoprogetto subprj = controller.selectSottoprogettoByIndex(0);
		
		navigazione.setNavigazione("<html><b>Progetto:</b> "+ controller.getProgetto().getNome() + "; "
		+ "<b>Sottoprogetto:</b> " + subprj.getNome() + "</html>");
		}
		navigazione.setNavigazione("<html><b>Progetto:</b> "+ controller.getProgetto().getNome() + "</html>");
		
		return navigazione;
		
	}		
	
}
